package com.zhiyou100.api.file_demo;

import java.io.File;
import java.io.IOException;
import java.util.Date;

public class Demo1 {


    public static void main(String[] args) {
        test4();
    }

    /**
     * 根据指定的目录以及指定的文件后缀，获取指定后缀的文件
     */
    public static void test5(){
        String path = "F:\\IntelliJ IDEA";
        File file = new File(path);
        //将.exe  .pdf  .zip结尾的文件获取
        //创建一个FilenameFilter对象，表示过滤器，accept方法  dir表示file所在的目录，name表示file名字
        String[] list = file.list((dir, name) -> {
            boolean b = name.endsWith(".exe") || name.endsWith(".pdf") || name.endsWith(".zip");
            return b;
        });
        for (String s : list) {
            System.out.println("s = " + s);
        }
        //根据FileFilter对象进行过滤，  pathname表示的是一个当前目录下的子目录或子文件File对象
        File[] files = file.listFiles(pathname -> {
            String name = pathname.getName();
            return name.endsWith(".exe") || name.endsWith(".pdf") || name.endsWith(".zip");
        });
    }

    /**
     * 遍历目录操作：
     * 根据指定的目录获取当前目录下所有的文件或目录
     * F:\IntelliJ IDEA
     */
    public static void test4() {
        String path = "F:\\IntelliJ IDEA";
        File file = new File(path);
        //获取当前目录下的子目录或文件  返回值是一个字符串数组
        String[] list = file.list();
        for (String s : list) {
            System.out.println("s = " + s);
        }
        System.out.println("-------------------------------");
        //返回一个File数组
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1.getName());
        }
    }


    /**
     * 文件 操作：
     * 创建(创建文件)
     * 删除
     * 重命名
     * .....
     */
    public static void test3() {
        String path = "C:/test1/test3/test.txt";
        File file = new File(path);
        //创建文件，先判断是否存在,如果已经存在，就删除
        if (file.exists()) {
            file.delete();
        }
        try {
            boolean b = file.createNewFile();
            System.out.println(b ? "文件创建成功" : "文件创建失败");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //文件重命名(文件的移动)
        file.renameTo(new File("D:/test.txt"));
    }


    /**
     * 目录 操作：
     * 创建(创建文件、创建目录)
     * 删除
     * 重命名
     * .....
     */
    public static void test2() {
        //在c盘下创建一个test目录   C:/test1/test2
        File file = new File("C:/test1/test2");
        //先判断是否存在，如果已经存在就删除
        if (file.exists()) {
            file.delete();
        }
        //不存在就创建   mkdir 只能创建单级目录     mkdirs：创建多级目录
        boolean b = file.mkdirs();
        System.out.println(b ? "创建成功" : "创建失败");
        //重命名
        file.renameTo(new File("C:/test1/test3"));
    }


    /**
     * 获取文件的相关属性
     */
    public static void test1() {
        File file = new File("F:/javaTools/apache-maven-3.6.3/README.txt");
        long length = file.length();
        System.out.println("文件的长度：" + length + "字节");
        boolean b = file.isDirectory();
        System.out.println(b ? "当前是一个目录" : "当前不是一个目录");
        boolean b1 = file.isFile();
        System.out.println(b1 ? "当前是一个文件" : "当前不是一个文件");

        boolean b2 = file.isHidden();
        System.out.println(b2 ? "当前是隐藏的文件或目录" : "当前不是隐藏的文件或目录");

        boolean b3 = file.canRead();
        System.out.println(b3 ? "当前是可读文件" : "当前不是可读文件");

        boolean b4 = file.canWrite();
        System.out.println(b4 ? "当前是可写文件或目录" : "当前不是可写的文件或目录");

        long l = file.lastModified();
        System.out.println("文件的上次修改时间：" + new Date(l));

        System.out.println("文件的绝对路径：" + file.getAbsolutePath());
        System.out.println("文件的路径：" + file.getPath());
        System.out.println("文件名称：" + file.getName());
        String parent = file.getParent();
        System.out.println("文件的父目录：" + parent);
    }


    /**
     * File： 文件或目录的抽象表示
     * 路劲分隔符： windows中，\表示路劲  java中\表示转义字符   此时表示路劲时，可以使用\\   或者/
     * 相对路劲一般使用./表示当前路劲
     */
    public static void createFile() {

        //表示一个File对象   根据一个文件或目录的路劲
        File file = new File("F:\\javaTools\\apache-maven-3.6.3\\README.txt");
        //根据指定的父目录路径以及子目录或文件路劲 创建File对象
        File file2 = new File("F:\\javaTools", "apache-maven-3.6.3\\README.txt");

        File parent = new File("F:\\javaTools");
        //基于父目录对象创建一个File对象
        File file3 = new File(parent, "apache-maven-3.6.3\\README.txt");
        System.out.println("file = " + file);
        System.out.println("file2 = " + file2);
        System.out.println("file3 = " + file3);
    }


}
